﻿// using System;
// using System.IO;
// using UMT.Framework.Managers;
// using UnityEngine;
// using LitJson;
// using UMT.Framework.Security;
// using XLua;
// using Yoozoo.Gameplay.Managers;
// using Yoozoo.Framework.Managers;
// using SecurityManager = UMT.Framework.Managers.SecurityManager;
//
// namespace Login
// {
//     public class LoginNetManager :MonoBehaviour//: MonoBehaviour, NetworkManager.IListener, NetworkManager.ILuaSupport
//     {
//         //public class TestProtoMap : NetworkManager.IProtoMap
//         //{
//         //    private Dictionary<int, Type> m_dic = new Dictionary<int, Type>();
//             
//         //    public TestProtoMap()
//         //    {
//         //        m_dic = new Dictionary<int, Type>()
//         //        {
//         //            {1, typeof(LoginResponse)},
//         //            {7,typeof(SCPrompt)},
//         //            {10001,typeof(LoginSuccResp)},
//         //            {11000,typeof(RtsCreateTroopResponse)},
//         //            {11001,typeof(RtsDragTroopResponse)},
//         //            {11002,typeof(RtsGameJoinResponse)},
//         //            {11003,typeof(RtsMapViewResponse)},
//         //            {11004,typeof(SCRtsMarchBaseInfo)},
//         //            {11005,typeof(SCRtsTroopDetailInfo)},
//         //            {11006,typeof(SCRtsWorldNewObject)},
//         //            {11007,typeof(SCRtsWorldDeleteObject)},
//         //            {11008,typeof(SCRtsWorldUpdateObject)},
//         //            {11009,typeof(RtsTestAoeSkillRangeResponse)},
//         //            {11010,typeof(RtsCastleMoveResponse)},
//         //            {11011,typeof(RtsSetPlayerCastleResponse)},
//         //            {11012,typeof(RtsTroopHoldResponse)},
//         //            {11013,typeof(RtsTroopSetResponse)},
//         //            {11014,typeof(RtsPlayerAllTroopInfoResponse)},
//         //            {11015,typeof(SCRoundFight)},
//                     
//
//         //        };
//
//         //    }
//         //    System.Type NetworkManager.IProtoMap.GetProtoType(int messageId)
//         //    {
//         //        if (m_dic.ContainsKey(messageId))
//         //        {
//         //            return m_dic[messageId];
//         //        }
//
//         //        return null;
//         //    }
//         //}
//         
//         
//         private static LoginNetManager _instance;
//         // public static Yoozoo.Gameplay.Managers.NetworkManager m_networkManager;
//
//         private event Action OnUserLoginSuccess;
//         
//         public static LoginNetManager Instance
//         {
//             get
//             {
//                 if (_instance == null)
//                 {
//                     GameObject item = new GameObject("LoginNetManager");
//                     _instance = item.AddComponent<LoginNetManager>();
//                     // m_networkManager = Yoozoo.Gameplay.Managers.NetworkManager.GetInstance();
//                     //m_networkManager = NetworkManager.GetInstance();
//                     //m_networkManager.Initialize();
//                     //m_networkManager.AddListener(_instance);
//                     //m_networkManager.AddProtoMap(new TestProtoMap());
//                     DontDestroyOnLoad(item);
//                 }
//                 return _instance;
//             }
//         }
//
//         void Update()
//         {
//             // if (m_networkManager != null)
//             // {
//             //     m_networkManager.Update();
//             // }
//         }
//
//         //private ProtobufSerializer serializer = new ProtobufSerializer();
//
//         public byte[] AESEncrypt(byte[] bytes)
//         {
//             return SecurityManager.AESEncrypt(bytes);
//         }
//
//         /*public object Deserialize(MemoryStream stream, Type protoType)
//         {
//             // C#层的反序列化
//             return serializer.Deserialize(stream, null, protoType);
//         }*/
//
//         public void Disconnect()
//         {
//             UnityEngine.Debug.Log("Disconnect");
//         }
//
//         public void OnConnectFailure()
//         {
//
//             UnityEngine.Debug.Log("OnConnectFailure");
//         }
//
//         //public void OnConnectSuccess()
//         //{
//         //    NetworkManager.AddListener((int)SCMessageEnum.SC_LoginResponse, OnLoginResult);
//
//         //    RTSScene.IsTest = false;
//         //    RTSScene.Instance.rtsServerMsg = new RTSServerMsg();
//         //    RTSScene.Instance.rtsServerMsg.Init();
//             
//         //    LoginRequest loginRequest = new LoginRequest();
//             
//         //    loginRequest.account = GlobalInfo.Instance.UserTokenInfo.account;
//         //    loginRequest.serverid = GlobalInfo.Instance.UserTokenInfo.worldId;
//         //    loginRequest.timestamp = GlobalInfo.Instance.UserTokenInfo.timeStamp;
//         //    loginRequest.clientIp = GlobalInfo.Instance.UserTokenInfo.clientIp;
//         //    loginRequest.digest = GlobalInfo.Instance.UserTokenInfo.digest;
//         //    //loginRequest.clientpubkey = GlobalInfo.Instance.UserLoginData.token;
//         //    loginRequest.clientpubkey = EncryptAES.GetDiffieHellmanKey();
//         //    NetworkManager.SendMessage((int)CSMessageEnum.CS_LoginRequest, loginRequest,false);            
//         //}
//
//         public void OnReconnectFailure()
//         {
//             UnityEngine.Debug.Log("OnReconnectFailure");
//         }
//
//         public void OnReconnectSuccess()
//         {
//             UnityEngine.Debug.Log("OnReconnectSuccess");
//         }
//
//         public void Ping(long clientTimestamp)
//         {
//             UnityEngine.Debug.Log("Ping:" + clientTimestamp);
//         }
//
//         public void Serialize(MemoryStream stream, object msg)
//         {
//             //serializer.Serialize(stream, msg);
//         }
//
//         public void StartReconnect()
//         {
//             UnityEngine.Debug.Log("StartReconnect");
//         }
//
//         private XLua.LuaTable m_luaTable;
//         private XLua.LuaFunction m_luaOnRevFunction;
//
//         public void OnReceive(string tableName, string funcName, int msgId, byte[] bytes)
//         {
//             if (this.m_luaTable == null)
//             {
//                 this.m_luaTable = LuaManager.GetTable(tableName); ;
//             }
//             if (m_luaOnRevFunction == null)
//             {
//                 m_luaOnRevFunction = m_luaTable.Get<LuaFunction>(funcName);
//             }
//             m_luaOnRevFunction.Call(bytes, msgId);
//         }
//
//         public void NetHandler(string tableName, string funcName)
//         {
//             if (this.m_luaTable == null)
//             {
//                 this.m_luaTable = LuaManager.GetTable(tableName); ;
//             }
//             var f = m_luaTable.Get<LuaFunction>(funcName);
//             if (f != null)
//             {
//                 f.Call();
//                 f.Dispose();
//             }
//         }
//
//         public void RequsetServerList(Action<string> OnHttpSuccess, Action<string> OnHttpFail)
//         {
//             HttpManager.Get(GlobalInfo.ServerListUrl, OnHttpSuccess, OnHttpFail);
//         }
//
//         public void ConnectServer(string serverIp,string accName)
//         {
//             RequestLoginData(serverIp,accName);
//             // PlayerPrefs.SetString(GlobalInfo.LastServetIp, serverIp);
//         }
//
//         private void RequestLoginData(string serverIp, string accName)
//         {
//             string url = "http://"+ serverIp + "/login?account=" + accName + "&sign=zzz&timeline=1&open_addiction=1&channel_id=1&platform=app&op_id=10";
//             Debug.LogWarning("url =="+ url);
//             HttpManager.Get(url, GetLoginDataSuccess, GetLoginDataFail);
//         }
//
//         private void GetLoginDataSuccess(string data)
//         {
//             GlobalInfo.LoginData result = JsonMapper.ToObject<GlobalInfo.LoginData>(data);
//             if(result != null)
//             {
//                 GlobalInfo.Instance.UserLoginData = result;
//             }
//             string token = result.token;
//             GlobalInfo.TokenInfo tokenInfo = ParseTokenData(result.token);
//             if (tokenInfo != null)
//             {
//                 GlobalInfo.Instance.UserTokenInfo = tokenInfo;
//                 string[] add = tokenInfo.address.Split(':');
//
//                 SocketConnect(add[0], Convert.ToInt32(add[1]));
//             }
//         }
//
//         private void GetLoginDataFail(string data)
//         {
//             Debug.LogError("登录信息获取失败"+data);
//         }
//
//         private void SocketConnect(string address, int port)
//         {
//             Yoozoo.Gameplay.Managers.NetworkManager.Connect(address, port);
//         }
//
//         private void OnLoginResult(object data)
//         {
//             /*LoginResponse response = data as LoginResponse;
//
//             // RtsGame.Data.PlayerData.InitPlayerInfo(response);
//
//             EncryptAES.SetKey(response.serverkey);
//             
//             Debug.Log("发送LoginSuccReq");
//
//             LoginSuccReq req = new LoginSuccReq();
//             NetworkManager.SendMessage((int)CSMessageEnum.CS_LoginSuccReq, req);
//             
//             //进入沙盘
//             Debug.Log("登录成功进入沙盘");
//             if (OnUserLoginSuccess != null)
//             {
//                 OnUserLoginSuccess();
//                 OnUserLoginSuccess = null;
//             }*/
//             
//             //LuaManager.DoFile("test/unitTest/worldProxyUnitTest");
//         }
//
//         public void addLoginSuccess(Action callback)
//         {
//             OnUserLoginSuccess = callback;
//         }
//         
//         public void removeLoginSuccess(Action callback)
//         {
//             OnUserLoginSuccess = null;
//         }
//
//         private GlobalInfo.TokenInfo ParseTokenData(string token)
//         {
//             if (string.IsNullOrEmpty(token))
//             {
//                 return null;
//             }
//             Debug.LogWarning("token ==" + token);
//             var info = EncryptAES.AESDecrypt(Convert.ToString(token), "lileiandhanmeime");
//             string[] tokenArray = info.Split('^');
//             GlobalInfo.TokenInfo tokenInfo = new GlobalInfo.TokenInfo();
//             tokenInfo.account = tokenArray[0];
//             tokenInfo.worldId = tokenArray[1];
//             tokenInfo.playerId = tokenArray[2];
//             tokenInfo.longplayerId = Convert.ToInt64(tokenArray[2]);
//             tokenInfo.timeStamp = Convert.ToInt32(tokenArray[3]);
//             tokenInfo.clientIp = tokenArray[4];
//             tokenInfo.digest = tokenArray[5];
//             tokenInfo.address = tokenArray[6];
//             return tokenInfo;
//         }
//   
//     }
// }
